El problema: Clusterizar diseƱos

ĀæComo hago para clasificar estilos de banners?

Input data

  • y : Distancia desde arriba

  • x : Distancia desde la izquierda

  • w : Ancho (width)

  • h : Alto (height)

Estrategia 1:

  • Reduccion de dimensionalidad + Clustering
library(umap)
library(dbscan)
umap_data<- umap(data)
cl <-hdbscan(x = umap_data, minPts = 3)

  • Se puede ver un grupo diferenciado, pero los demas no estan tan claros.

  • Al separar en diferentes carpetas los archivos de cada cluster generado, los diseƱadores no estaban conformes, habia diseƱos distintos que habian sido clasificados como similares

”Es necesario transformar los datos!

Opciones:

  • Estandarizacion (z-score): Representa el numero de desvios estandar arriba o debajo del valor resultante. Útil para variables normalmente distribuidas

  • Normalizacion (min-max scaler): Permite llevar los valores entre 0 y 1. Útil para comparar variables de diferentes ordenes de magnitud (Precio de una casa y los m2 que ocupa)

ĀæQue tienen en comun?

  • En ambos casos las variables no estan necesariamente interrelacionadas entre si.

ĀæQue hacer con estas variables?

  • La representacion matematica serĆ­a:

\[ r = 323y+ 8x + 6w + 39h\]

  • ĀæComo hacer que las variables esten entre [0,1]?

  • Los datos, ademas de coordenadas, describen dimensiones de tamaƱo
    • [x,y,h,w] donde:
      • [x,y] describen la posicion
      • [h,w] describen el tamaƱo (heigth, width)

Normalizacion “geometrica”

  • x’ es la proporcion de x respecto al rango total (ancho del canvas)

Normalizacion “geometrica”

  • y’ es la proporcion de y respecto al rango total (alto del canvas)

Normalizacion “geometrica”

  • areaRelativa es la proporcion del area del elemento respecto al total

Normalizacion “geometrica”

  • posicion (dividiendo alto por acho) es para saber si el elemento es horizontal(<1), vertical(>1), o cuadrado(=1)

Resultados

Los calculos serian:

\[x' = {{max(x)-x} \over max(x)} \] \[y' = {{max(y)-y} \over max(y)} \] \[areaRelativa = {{h*w} \over x*y} \] \[posicion = {{h} \over w} \]

R

Y en R se enrieda todo en una sola funcion:

normalize_geometric<-function(df){
  df['total_area']<-max(df['layer_height'])*max(df['layer_width'])
  df['rel_area']<-df['layer_height']*df['layer_width']/df['total_area']
  df['orientation']<-df['layer_height']/df['layer_width']
  df['layer_top_relative']<-df['layer_top']/max(df['layer_height'])
  df['layer_left_relative']<-df['layer_left']/max(df['layer_width'])
  df
}